package com.xupt.easy.array;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zhaoxin
 * @title: Merge088
 * @projectName LeetCode
 * @description: 合并两个有序数组
 * @date 2019/11/19 13:41
 */
public class Merge088 {

    /**
     * 给定两个有序整数数组 nums1 和 nums2，将 nums2 合并到 nums1 中，使得 num1 成为一个有序数组。
     *
     * 说明:
     *
     * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
     * 你可以假设 nums1 有足够的空间（空间大小大于或等于 m + n）来保存 nums2 中的元素
     *
     * 示例:
     *
     * 输入:
     * nums1 = [1,2,3,0,0,0], m = 3
     * nums2 = [2,5,6],       n = 3
     *
     * 输出: [1,2,2,3,5,6]
     *
     *
     * @param nums1
     * @param m
     * @param nums2
     * @param n
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p = 0;
        int q = 0;
        int count = 0;
        int [] nums1_copy = new int[nums1.length];
        System.arraycopy(nums1, 0, nums1_copy, 0, m);
        while((p < m) && (q < n)){
            if (nums1_copy[p] > nums2[q]){
                nums1[count] = nums2[q++];
            }else {
                nums1[count] = nums1_copy[p++];
            }
            count++;
        }
        if (q < n){
            System.arraycopy(nums2, q, nums1, (p + q), (m + n - p - q));
        }
        if (p < m){
            System.arraycopy(nums1_copy, p, nums1, (p + q), (m + n - p - q));
        }

    }


    public static void main(String[] args) {
        int [] nums1 = {2, 0};
        int [] nums2 = {1};

        Merge088 merge088 = new Merge088();
        merge088.merge(nums1, 1, nums2, 1);
    }






}
